#include "loadrawdialog.h"
#include "ui_loadrawdialog.h"

LoadRawDialog::LoadRawDialog(QWidget *parent) : QWidget(parent), ui(new Ui::LoadRawDialog)
{
    ui->setupUi(this);

    // Para hacer el URL de solo lectura en este punto
    ui->URLInput->setEnabled(false);
}

LoadRawDialog::~LoadRawDialog()
{
    delete ui;
}

// Esto permite mostrar el URL del dataset a reconstruir
void LoadRawDialog::SetURL(QString URL)
{
    ui->URLInput->setText(URL);

    qDebug("Intermediate Dialog gets: %s", URL.toStdString().c_str());
}

// Esta funcion simplemente reestablece los inputs
void LoadRawDialog::CleanThis()
{
    ui->XSizeInput->setValue(3);
    ui->YSizeInput->setValue(3);
    ui->ZSizeInput->setValue(3);
    ui->BitDepthInput->setCurrentIndex(0);
    ui->IsovalueInput->setValue(0);
    ui->MaxPoligonInput->setValue(0);
    ui->MaxXInput->setValue(0);
    ui->MaxYInput->setValue(0);
    ui->MaxZInput->setValue(0);
}

void LoadRawDialog::on_BuildButton_clicked()
{
    // Recoleccion de datos
    QString URL= ui->URLInput->text();
    int XSize= ui->XSizeInput->value();
    int YSize= ui->YSizeInput->value();
    int ZSize= ui->ZSizeInput->value();
    int BitDepth= ui->BitDepthInput->currentText().toInt();
    int IsoValue= ui->IsovalueInput->value();
    int MaxPoligon= ui->MaxPoligonInput->value();
    int MaxX= ui->MaxXInput->value();
    int MaxY= ui->MaxYInput->value();
    int MaxZ= ui->MaxZInput->value();
    int NormCalc= ui->NormalModeInput->currentIndex();

    // Validaciones
    short int ErrorMask = 0;

    if (MaxX > XSize) ErrorMask |= 1;
    if (MaxY > YSize) ErrorMask |= 2;
    if (MaxZ > ZSize) ErrorMask |= 3;

    VObject::NORMALMODE NormMode;
    if (NormCalc==0)
        NormMode= VObject::CENTRALDIF;
    else if (NormCalc==1)
        NormMode= VObject::PERVERTEX;
    else
        NormMode= VObject::PERTRIANGLE;

    if (ErrorMask!=0)
    {
        QMessageBox* ErrorMessage= new QMessageBox();

        ErrorMessage->setWindowTitle("Error");
        ErrorMessage->setText("Se han encontrado los siguientes errores:");
        ErrorMessage->setIcon(QMessageBox::Warning);

        QString Output= "";

        if (ErrorMask & 1) Output += "'X' máximo excede el tamaño en X de la entrada.<br>";
        if (ErrorMask & 2) Output += "'Y' máximo excede el tamaño en Y de la entrada.<br>";
        if (ErrorMask & 3) Output += "'Z' máximo excede el tamaño en Z de la entrada.<br>";

        ErrorMessage->setInformativeText(Output);

        ErrorMessage->show();
    }
    else
    {
        emit BuildModel(URL,
                        NormMode,
                        XSize, YSize, ZSize,
                        BitDepth,
                        ui->IsovalueInput->value(),
                        ui->MaxPoligonInput->value(),
                        MaxX, MaxY, MaxZ);

        this->close();
    }
}

void LoadRawDialog::on_CancelButton_clicked()
{
    this->close();
}
